آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic
تهیه و آموزش نرم افزار دارک بیسیک
 
 
پنج شنبه 22 فروردين 1392برچسب:, :: 1:46 ::  نويسنده : ابوالفضل

 در این فصل به چگونگی کنترل بازی توسط کاربر می پردازیم . دستورات و توابعی را یاد می گیریم تا وردی ها را کنترل کنیم . مثلا در عوض فشرده شدن کلید های موس و کیبورد یا حرکت موس ، کار خاصی را انجام دهیم .

 

دستور HIDE MOUSE

این دستور باعث مخفی شدن شکل موس ( فلش متحرک ) بر روی صفحه ی نمایشگر می شود . مانند مثال زیر :

 

HIDE MOUSE

Wait Key

 

با اجرای این مثال زمانی که برنامه در حالت اجراست ، شکل موس دیده نخواهد شد .

 

دستور SHOW MOUSE

اگر از دستور گذشته ( HIDE MOUSE ) در برنامه استفاده کرده باشیم . می توانیم با این دستور شکل موس ( فلش متحرک ) را دوباره در صفحه نمایشگر ظاهر کنیم . مانند مثال زیر :

 

HIDE MOUSE

"PRINT "Hide Mouse

WAIT 5000

"CLS : PRINT "Show Mouse

SHOW MOUSE

WAIT KEY

 

در این مثال در خط اول شکل موس مخفی و پس از 5 ثانیه در خط پنجم شکل موس دوباره آشکار خواهد شد .

 

دستور POSITION MOUSE

با استفاده از این دستور ، می توانیم موقعیت مکانی موس را بر روی صفحه ی نمایشگر مشخص کنیم . مانند دستورالعمل زیر :

 

POSITION MOUSE X,Y

 

طبق این دستورالعمل به جای X موقعیت طولی ( فاصله ی موس تا چپ صفحه ) و به جای Y موقعیت عرضی ( فاصله ی موس تا بالای صفحه ) را قرار  می دهیم . تعیین موقعت موس با این دستور بستگی به مختصات طولی و عرضی دارد . یعنی اگر برای مثال ، مختصات طولی و عرضی نمایشگر ( رزولوشن ) را روی 480*640 تنظیم کرده باشیم ( قبلا در فصل سوم زمان معرفی دستور Set Cursor توضیح داده شد ) ، کمترین مقدار X صفر و بیشترین مقدار آن 639 و همچنین کمترین مقدار Y صفر و بیشترین مقدار آن 479 خواهد بود . مانند مثال زیر :

 

Do

Position Mouse 100,100

WAIT 500

Position Mouse 400,400

WAIT 500

Loop

 

در این مثال ، هر 500 میلی ثانیه ، موقعیت موس با دستور Position Mouse تغییر خواهد کرد . 

 

دستور CHANGE MOUSE

با این دستور می توانیم شکل موس را تغییر دهیم . مانند دستور العمل زیر :

 

CHANGE MOUSE CursorNumber

 

طبق این دستورالعمل ، اگر به جای CursorNumber عدد صفر را قرار دهیم ، شکل موس به شکل ساعت شنی در می آید و اگر به جای CursorNumber عدد یک را قرار دهیم ، شکل موس به حالت عادی اش ( به شکل فلش ) برمی گردد . مانند مثال زیر :

 

"... Print "Please Wait

CHANGE MOUSE 1

Wait 2500

"Cls : Print "Thank You

CHANGE MOUSE 0

Do : Loop

 

با اجرای این مثال در خط دوم ، موس بشکل ساعت شنی در می آید و در خط پنجم ، موس بشکل عادی اش برمی گردد . زمانی که محاسبات سنگینی را انجام می دهیم ، از این روش برای نشان دادن حالت انجام محسابات استفاده می کنیم .

 

دستور WRITE TO CLIPBOARD

با استفاده از این دستور ، می توانیم یک عبارت کاراکتری را به حافظه ی موقت ویندوز (Clipboard  ) انتقال دهیم . مانند مثال زیر :

 

"WRITE TO CLIPBOARD "This Is A Example

Wait Key

 

در این مثال ، برای نمونه عبارت This Is A Example را به حافظه ی موقت ویندوز (Clipboard  ) انتقال دادیم . می توانیم در برنامه های دیگر از آن استفاده کنیم ( بچسبانیم . یعنی به جای دیگری Paste کنیم ) . تا زمانی که حافظه ی Clipboard توسط این برنامه یا برنامه های دیگر دوباره تغیر نکرده باشد ، عبارت This Is A Example در حافظه ی Clipboard باقی خواهد ماند .

 

تابع $GET CLIPBOARD

اگر قبلا در حافظه موقت ویندوز ( Clipboard ) عبارتی ذخیره شده باشد ( از دستورWRITE TO CLIPBOARD و یا توسط دیگر برنامه ها ) ، با این تابع می توانیم مقدار آن را بخوانیم . مانند مثال زیر :

 

"A$ = "Hello

$WRITE TO CLIPBOARD A

()$retStr$ = GET CLIPBOARD

$Print retStr

Suspend For Key

 

با اجرای این مثال ، عبارت Hello در حافظه ی موقت ویندوز ( Clipboard ) ذخیره شد و در خط سوم ، به متغیر $retStr انتقال پیدا کرد و در خط چهارم چاپ شد .

 

تابع MOUSECLICK

با این تابع می توانیم کیک شدن دکمه ی سمت چپ موس را بررسی کنیم . یعنی اگر مقدار این تابع برابر یک بود یعنی کلید سمت چپ موس فشرده شده و اگر مقدار این تابع برابر صفر بود ، یعنی کلید سمت چپ موس فشرده نشده ، مانند مثال زیر :

 

Do

Cls

"If MouseClick() Then Text 10,10,"Click

"If MouseClick() = 0 Then Text 20,20,"No Click

Loop

 

با اجرای این مثال اگر دکمه ی سمت چپ موس فشرده شود ، عبارت Click چاپ می شود . و اگر دکمه ی سمت چپ موس فشرده نشده باشد ، عبارت No Click چاپ خواهد شد .

 

تابع MOUSEX و تابع MOUSEY

این دو تابع موقعیت طولی و عرضی موس را برمی گردانند . یعنی اگر موس در هر موقعیتی در صفحه ی نمایشگر باشد . مقدار تابع ()MouseX موقعیت طولی و مقدار تابع ()MouseY موقعیت عرضی موس را برمی گردانند ( حساب خواهند کرد ) . مانند مثال زیر :

 

Do

Cls

Set Cursor 10,10

()Print "Position X = " ; MouseX

Set Cursor 10,20

()Print "Position Y = " ; MouseY

Loop

 

با اجرای این مثال موقعیت طولی و عرضی موس بر روی صفحه ی نمایشگر چاپ خواهد شد . یعنی اگر موس در هر جایی از صفحه باشد ، مقدار فاصله ی آن تا سمت چپ صفحه بعنوان طول ( X ) و مقدار فاصله ی آن از بالای صفحه بعنوان عرض ( Y ) چاپ خواهد شد .

 

تابع MOUSEZ

هر زمان که چرخ مابین دو کلید چپ و راست موس را به بالا و پایین حرکت می دهیم ، مقدار این تابع کم و زیاد خواهد شد ( هر بار مقدار 120 واحد ) . می توانیم در بازی برای زوم کردن از آن استفاده کنیم . مانند مثال زیر :

 

Do

Cls

Set Cursor 10,10

()Select MouseZ

   Case 0

      "Print "No Zoom

   EndCase

   Case 120

      "Print "1X Zoom

   EndCase

   Case 240

      "Print "2X Zoom

   EndCase

   Case 360

      "Print "3X Zoom

   EndCase

   Case Default

      "Print "4X Zoom

   EndCase

EndSelect

()Print "Position Y = " ; MouseZ

Loop

 

تابع MOUSEMOVEX و تابع MOUSEMOVEY

تابع ()MouseMoveX مقدار حرکت موس را ، در جهت مختصات طولی ( محور X نمایشگر ) ، و تابع ()MouseMoveX مقدار حرکت موس را ، در جهت مختصات عرضی ( محور Y نمایشگر ) در هر لحظه از زمان محاسبه کرده و مقدار آن را برمی گرداند . مانند مثال زیر :

 

do

Cls

()X# = MouseMoveX

(#Text 10,10,"MouseMoveX = " + Str$(X

(()Text 10,30,"MouseMoveY = " + Str$(MouseMoveY

wait 100

Loop

 

این مثال را تایپ و اجرا کنید . هم اکنون با حرکت دادن موس ، مقدار حرکت موس در هر لحظه بر روی صفحه ی مانیتور نمایش داده خواهد شد . ما در این مثال از دستور wait استفاده کردیم تا برنامه کمی کند اجرا شود ، تا شما اعداد این دو تابع را به خوبی ببینید .

 

تابع MOUSEMOVEZ

هر زمان که چرخ مابین دو کلید چپ و راست موس را به بالا و پایین حرکت می دهیم ، مقدار حرکت این چرخ در هر لحظه توسط این تابع محاسبه و بصورت یک عدد برگردانده می شود . ( هر بار مقدار 120 واحد ) . مانند مثال زیر :

 

Do

Cls

()Print "MouseMoveZ = " ; MouseMoveZ

Wait 100

Loop

 

تابع UPKEY

در صفحه ی کیبورد کامپیوتر ، چهار کلید ، جهات ( بالا و پایین و چپ و راست ) را نشان می دهند ، که به Arrow Keys معروف هستند .  زمانی که دکمه جهت بالا فشرده شده باشد ، تابع ()UpKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()UpKey مقدار صفر را در خود نگه خواهد داشت . همانند مثال زیر :

 

do

Cls

"if upkey() = 1 Then print "Up Key Has Been Pressed

"if upkey() = 0 Then print "Up Key Has Not Be Pressed

loop

 

با اجرای این مثال اگر دکمه ی جهت بالا فشرده شده باشد ، عبارت Up Key Has Been Pressed چاپ خواهد شد و اگر رها شده باشد ، عبارت Up Key Has Not Be Pressed چاپ خواهد شد . پس ما با استفاده از این گونه توابع می توانیم فشرده و یا رها شدن دکمه ها را کنترل کنیم .

 

تابع DOWNKEY

زمانی که دکمه جهت پائین فشرده شده باشد ، تابع ()DownKey مقدار یک و زمانی که همین دکمه رها شده باشد ، تابع ()DownKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Downkey() = 1 Then print "Down Key Has Been Pressed

"if Downkey() = 0 Then print "Down Key Has Not Be Pressed

loop

 

تابع LEFTKEY

زمانی که دکمه جهت چپ فشرده شده باشد ، تابع ()LeftKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()LeftKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Leftkey() = 1 Then print "Left Key Has Been Pressed

"if Leftkey() = 0 Then print "Left Key Has Not Be Pressed

loop

 

تابع RIGHTKEY

زمانی که دکمه جهت راست فشرده شده باشد ، تابع ()RightKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()RightKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Rightkey() = 1 Then print "Right Key Has Been Pressed

"if Rightkey() = 0 Then print "Right Key Has Not Be Pressed

loop

 

تابع CONTROLKEY

زمانی که دکمه ی کنترل ( دو دکمه ای که عبارت Ctrl بر روی آنهاست ) فشرده شده باشد ( یکی یا هر دو ) ، تابع ()ControlKey مقدار یک را برمی گرداند و زمانی که این دکمه ( یکی یا هر دو ) رها شده باشد ، تابع ()ControlKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if ControlKey() = 1 Then print "Ctrl Key Has Been Pressed

"if Controlkey() = 0 Then print "Ctrl Key Has Not Be Pressed

loop

 

تابع SHIFTKEY

زمانی که دکمه ی شیفت ( دو دکمه ای که عبارت Shift بر روی آنهاست ) فشرده شده باشد ( یکی یا هر دو ) ، تابع ()ShiftKey مقدار یک را برمی گرداند و زمانی که این دکمه ( یکی یا هر دو ) رها شده باشد ، تابع ()ShiftKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

if ShiftKey() = 1

   "print "Shift Key Has Been Pressed

Else

   "print "Shift Key Has Not Be Pressed

EndIf

loop

 

تابع RETURNKEY

زمانی که دکمه Enter فشرده شده باشد ، تابع ()ReturnKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()ReturnKey مقدار صفر را برمی گرداند مانند مثال زیر :

 

do

Cls

"if Returnkey() = 1 Then print "Return Key Has Been Pressed

"if Returnkey() = 0 Then print "Return Key Has Not Be Pressed

loop

 

تابع SPACEKEY

زمانی که دکمه Space ( بزرگ ترین دکمه در کیبورد ) فشرده شده باشد ، تابع ()SpaceKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()SpaceKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Spacekey() = 1 Then print "Space Key Has Been Pressed

"if Spacekey() = 0 Then print "Space Key Has Not Be Pressed

loop

 

تابع ESCAPEKEY

زمانی که دکمه Esc فشرده شده باشد ، تابع ()EscapeKey مقدار یک و زمانی که این دکمه رها شده باشد ، تابع ()EscapeKey مقدار صفر را برمی گرداند . مانند مثال زیر :

 

do

Cls

"if Escapekey() = 1 Then print "Escape Key Has Been Pressed

"if Escapekey() = 0 Then print "Escape Key Has Not Be Pressed

loop

 

نکته بسیار مهم :

زمانی که دکمه ی Esc را فشار می دهیم . از برنامه هم خارج می شویم . دلیل آن چیست ؟ دلیل آن این است که این خاصیت جزء رفتار های DarkBasic می باشد ، یعنی در هر زمان با زدن Esc از بازی خارج می شویم . حتی اگر نخواهیم . پس برای اینکه این خاصیت خروج سریع با زدن Esc را غیر فعال کنیم ، از کد زیر استفاده می کنیم . مانند مثال زیر :

 

Disable EscapeKey

do

Cls

"if Escapekey() = 1 Then print "Escape Key Has Been Pressed

"if Escapekey() = 0 Then print "Escape Key Has Not Be Pressed

loop

 

این مثال را اجرا می کنیم و دکمه ی Esc را چند بار می زنیم . حالا چگونه باید از برنامه خارج شویم ؟ می توانیم با فشردن سه کلید Ctrl و Alt و Delete بطور هم زمان برنامه را از مدار خارج کنیم . همچنین می توانیم مانند مثال زیر خروج از برنامه را تحت کنترل خود در بیاوریم .

 

Disable EscapeKey

do

Cls

if Inkey$() = "Q" Or Inkey$() = "q" Then End

"Print "Q Key To Exit Program

loop

 

در این مثال اگر دکمه ی [Q] را فشار دهیم ، از برنامه خارج خواهیم شد .

 

تابع INKEY

در مثال بالا از تابع ()$Inkey استفاده کردیم . یعنی اگر در هر زمان ، هر کدام از دکمه های حروف فشرده شود ، تابع ()$Inkey همان حرف را بصورت یک عبارت تک کاراکتری برمی گرداند . مانند مثال زیر :

 

do

Cls

()$Text 20,20,Inkey

loop

 

این مثال را اجرا کنید و چند دکمه ( دکمه های حروف ) را بزنید ( دکمه های A تا Z ) . با زدن هر دکمه حرف مربوط به آن دکمه چاپ خواهد شد . البته اگر دکمه ی Shift را نگه دارید و یا دکمه ی Caps Lock را قبلا روشن کرده باشید ، حالت کوچک و یا بزرگ بودن حروف تغییر خواهد کرد .

 

تابع SCANCODE

هر یک از دکمه های کیبورد ( تمامی دکمه ها بدون استثنا ) یک شماره ی کد مخصوص به خود را دارد . در صورت فشرده شدن هر کدام از دکمه ها ، تابع ()ScanCode در هر زمان شماره ی مخصوص همان دکمه را بصورت یک عدد برمی گرداند . مانند مثال زیر :

 

cls

do

if scancode() > 0

()print scancode

endif

loop

 

با اجرای این مثال می توانیم شناسایی کنیم که هر کدام از دکمه ها چه کدی دارد . مثلا با اجرای این مثال دکمه ی F1 را فشار می دهیم و برنامه عدد 59 را نشان می دهد . پس با این مثال فهمیدیم که کد دکمه ی F1 برابر 59 می باشد . پس اگر خواستیم از دکمه ی F1 بعنوان راهنما ( Help ) در بازی استفاده کنیم ، از این کد استفاده می کنیم . مانند مثال زیر :

 

Do

Cls

"Print "Press F1 To Help

"If ScanCode() = 59 Then Print "Help View

Loop




صفحه قبل 1 صفحه بعد

درباره وبلاگ


به وبلاگ من خوش آمدید
آخرین مطالب
پيوندها

تبادل لینک هوشمند
برای تبادل لینک  ابتدا ما را با عنوان آموزش ساخت بازی 3D ( سه بعدی ) به زبان Basic با دارک بیسیک D و آدرس darkbasic.LXB.ir لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.





نويسندگان


آمار وب سایت:  

بازدید امروز : 3
بازدید دیروز : 0
بازدید هفته : 3
بازدید ماه : 245
بازدید کل : 99615
تعداد مطالب : 24
تعداد نظرات : 3
تعداد آنلاین : 1